{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import CommonFunctions as Cf\n",
    "import matplotlib.pyplot as plt\n",
    "import QuadrotorFlyModel as Qfm\n",
    "import MemoryStore\n",
    "D2R = Cf.D2R"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.array([[1,3,5], [3,5,7],[6,7,9]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Quadrotor structure type StructureType.quad_x\n",
      "Quadrotor get reward: 0.07326440885809381\n"
     ]
    },
    {
     "data": {
      "image/png": "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m2bOnFkEsGvXLuNdd92VvHTp0oiioiJjbXPw0KFDq2rPMXbs2KrHHnss2e/3880334T37t3bdfHFF5fddttt6QALFy4Mczgc/qFDh7pb4xpUr+9OxKjXEWU3EWVX8z4ritLyGluibQ+ys7M9I0aMqHzppZdipk6dWvnSSy/FDhgwwDls2DC33+9n6tSpmU6nU//nP/85v3fv3u7w8PDAAw88kFRcXHx00vWJEydW/vnPf9bn5uZaly5dGjZy5MjKSZMmVRUXFxs3b95s+uGHH8JzcnIqda009kan6PW9atWqIiHEvia+PBbo0B0mmkBdc9egrrlraM41d2/JQNqrG264oegPf/hD9z179hz86quvIh955JE8gE2bNpm3bNlie++993ZcdtllRwugbrf7uIybk5Pjdjgc/kWLFoUtX748/OGHHz4YHR0d6N27t2vhwoXhK1euDLvlllsKWiv+psxHfcpe30IIY337W5uUsslDZQkhck/V67GzUtfcNahr7hq64jU31nXXXVd69913p1122WU9pZTixhtvLAFwOp06ALPZfLRJd/v27abVq1eHZWVl1U5GhU6nY+jQoVUffPBB9P79+81TpkypBBg1alTlq6++GltYWGg855xzqk5835bSqHK6lPKXdZO0EEIvNBOEEC8Ch1s8QkVRFEVpBpvNJi+55JKS1atXh02ePLk0NjbWDzB48GB3QkKC95577kl5++23HXPmzImaMmVK7/j4eO+J5xg3blxlbm5uWHp6ujs5OdkHcNZZZ1Xl5uaGWSyWwNixY6tPfE1LaXCiFkJECSF+I4SYJ4Q4IITwAF7ADywErgaWtFKciqIoitJkl156aSnATTfddLSZwGq1ynfeeWenXq/nhhtuyJg1a1byH//4x0OjRo06qfd2bYl51KhRR0vOkyZNqgQYNGiQs26pvKU1pDNZOtptV1cAlWjt0/bga33B9feACZgqhNgG/BV4XTZmNJXQmRPqAEJAXXPXoK65a+iK19xoX375paNbt26eqVOnHpeEzz777OoNGzZsqbvv9ttvL+YEEyZMcEopV9Xdl5qa6jtxX2toSGeyjcAWtHun0wEHsAB4C60EvR+4X0r5nRAiBrgM+BPa7VqPt0LMLUpK2eV+ydU1dw3qmruGrnjNjbFu3TrzunXrrK+99lrcnXfema/X60MdUqM1JFHb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\n",
      "text/plain": [
       "<Figure size 432x288 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "uavPara = Qfm.QuadParas(structure_type=Qfm.StructureType.quad_x)\n",
    "simPara = Qfm.QuadSimOpt(init_mode=Qfm.SimInitType.fixed, enable_sensor_sys=False,\n",
    "                     init_att=np.array([10., -10., 30]), init_pos=np.array([5, -5, 0]))\n",
    "quad1 = Qfm.QuadModel(uavPara, simPara)\n",
    "record = MemoryStore.DataRecord()\n",
    "record.clear()\n",
    "step_cnt = 0\n",
    "for i in range(1000):\n",
    "    ref = np.array([0., 0., 1., 0.])\n",
    "    stateTemp = quad1.observe()\n",
    "    action2, oil = quad1.get_controller_pid(stateTemp, ref)\n",
    "#     print('action: ', action2)\n",
    "    action2 = np.clip(action2, 0.1, 0.9)\n",
    "    quad1.step(action2)\n",
    "    record.buffer_append((stateTemp, action2))\n",
    "    step_cnt = step_cnt + 1\n",
    "record.episode_append()\n",
    "\n",
    "print('Quadrotor structure type', quad1.uavPara.structureType)\n",
    "# quad1.reset_states()\n",
    "print('Quadrotor get reward:', quad1.get_reward())\n",
    "data = record.get_episode_buffer()\n",
    "bs = data[0]\n",
    "ba = data[1]\n",
    "t = range(0, record.count)\n",
    "# mpl.style.use('seaborn')\n",
    "fig1 = plt.figure(1)\n",
    "plt.clf()\n",
    "plt.subplot(3, 1, 1)\n",
    "plt.plot(t, bs[t, 6] / D2R, label='roll')\n",
    "plt.plot(t, bs[t, 7] / D2R, label='pitch')\n",
    "plt.plot(t, bs[t, 8] / D2R, label='yaw')\n",
    "plt.ylabel('Attitude $(\\circ)$', fontsize=15)\n",
    "plt.legend(fontsize=15, bbox_to_anchor=(1, 1.05))\n",
    "plt.subplot(3, 1, 2)\n",
    "plt.plot(t, bs[t, 0], label='x')\n",
    "plt.plot(t, bs[t, 1], label='y')\n",
    "plt.ylabel('Position (m)', fontsize=15)\n",
    "plt.legend(fontsize=15, bbox_to_anchor=(1, 1.05))\n",
    "plt.subplot(3, 1, 3)\n",
    "plt.plot(t, bs[t, 2], label='z')\n",
    "plt.ylabel('Altitude (m)', fontsize=15)\n",
    "plt.legend(fontsize=15, bbox_to_anchor=(1, 1.05))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "v_img = 400\n",
    "h_img = 400\n",
    "ax_img_arr = np.zeros([v_img * h_img, 2])\n",
    "for i in range(v):\n",
    "    for j in range(h):\n",
    "        ax_img_arr[i*h_img + j, :] = [i, j]\n",
    "ax_img = ax_img_arr.reshape([v_img, h_img, 2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 单位是mm,\n",
    "ksx = 4 / v_img\n",
    "ksy = 4 / h_img\n",
    "sx0 = 2\n",
    "sy0 = 2\n",
    "# 焦距，单位mm\n",
    "focal = 2.36\n",
    "\n",
    "att_cam = bs[0, 6:9]\n",
    "# z的位置单位是m\n",
    "pos = bs[0, 0:3] * 1000\n",
    "\n",
    "m_img2sensor = np.array([[ksx, 0, sx0],\n",
    "                     [0, -ksy, -sy0],\n",
    "                     [0, 0, 1]])\n",
    "m_sensor2cam = np.array([[pos[2] / focal, 0, 0],\n",
    "                        [0, pos[2] / focal, 0],\n",
    "                         [0, 0, 1]])\n",
    "m_cam2world = Cf.get_rotation_matrix(att_cam)\n",
    "m_cam2world[:, 2] = "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.17453293 -0.17453293  0.52359878]\n"
     ]
    }
   ],
   "source": [
    "print(att_cam)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
